let gameFlag = false; //游戏开关，false表示没有开始游戏
let bulletFlag = true; //发送子弹开关
let stopbulletMove; //停止自动移动
let stopenemyPlaneShow; //停止敌机出现
let stopenemyPlaneMove; //停止敌机移动
let stopbulletSend; //停止子弹发送
let stopFit; //停止敌机与我方飞机相撞
let stopbulletFit; //停止子弹击中敌机
let double = 1; //发送子弹的数量

// 随机数函数
function randomNumber(min, max) {
    return parseInt(Math.random() * (max - min + 1) + min);
}
// 用于存放敌机名称
let arr = ["small", "middle", "big"];

// 子弹移动函数
function bulletMove() {
    for (let i = 0; i < $(".bullet").length; i++) {
        let bulletTop = $(".bullet").eq(i).position().top;
        if (bulletTop <= -20) {
            $(".bullet").eq(i).remove();
        } else {
            $(".bullet").eq(i).css("top", bulletTop - 1 + "px");
        }
    }
}
// 敌机出现函数
function enemyPlaneShow() {
    let index = randomNumber(0, arr.length - 1);
    let enemyPlaneWidth = 0;
    if (arr[index] === "small") {
        enemyPlaneWidth = 34;
    } else if (arr[index] === "middle") {
        enemyPlaneWidth = 46;
    } else {
        enemyPlaneWidth = 110;
    }
    $(".plane").append(`<img src="./images/enemyPlane_${arr[index]}.png" class="enemyPlane ${arr[index]}" alt=""
    style="left:${randomNumber(0,320-enemyPlaneWidth)}px" data-hp=${index+1} data-num=${index+1} >   `);

}
// 敌机移动函数
function enemyPlaneMove() {
    for (let i = 0; i < $(".enemyPlane").length; i++) {
        let enemyPlaneTop = $(".enemyPlane").eq(i).position().top;
        if (enemyPlaneTop >= 740) {
            $(".enemyPlane").eq(i).remove();
        } else {
            $(".enemyPlane").eq(i).css("top", (enemyPlaneTop + 1) + "px");
        }
    }

}
// 敌机与我方飞机相撞函数
function fit() {
    //我方飞机left值
    let myplaneLeft = $(".myplane").position().left;
    // 我方飞机top值
    let myplaneTop = $(".myplane").position().top;
    // 我方飞机宽度
    let myplaneWidth = $(".myplane").outerWidth();
    // 我方飞机高度
    let myplaneHeight = $(".myplane").outerHeight();
    for (let i = 0; i < $(".enemyPlane").length; i++) {
        //敌机left值
        let enemyPlaneLeft = $(".enemyPlane").eq(i).position().left;
        // 敌机top值
        let enemyPlaneTop = $(".enemyPlane").eq(i).position().top;
        // 敌机宽度
        let enemyPlaneWidth = $(".enemyPlane").eq(i).outerWidth();
        // 敌机高度
        let enemyPlaneHeight = $(".enemyPlane").eq(i).outerHeight();
        if (myplaneLeft + myplaneWidth > enemyPlaneLeft &&
            myplaneLeft < enemyPlaneLeft + enemyPlaneWidth &&
            myplaneTop < enemyPlaneTop + enemyPlaneHeight &&
            myplaneTop + myplaneHeight > enemyPlaneTop) {
            // alert("相撞");
            // 结束游戏
            stop();
            // 结束游戏页面出现
            $("#overGame").show();
            // 弹出输入框，输入用户姓名
            let userName = prompt("请输入玩家姓名：").trim();
            if (userName) {
                // 把玩家信息存储在localStrage中
                let obj = {
                    playerName: userName,
                    killNum: $(".killNum").text(),
                    allNum: $(".allNum").text()
                }
                // 在localStrage中查找当前玩家是否已经有分数，如果有就需要比较分数，
                // 当前分数大于之前的分数，就修改，小于之前的分数，就不修改
                let arr = [];
                for (let i in localStorage) {
                    if (i.slice(0, 5) === "plane") {
                        arr.push(JSON.parse(localStorage[i]));
                    }
                }
                let flag=false;//表示新玩家，true表示是老玩家
                for (let i = 0; i < arr.length; i++) {
                    if (arr[i].playerName === obj.playerName) {
                        if (arr[i].allNum*1 < obj.allNum*1) {
                            localStorage.setItem(`plane-${obj.playerName}`, JSON.stringify(obj));
                        }
                        flag=true;
                    } 
                }
                if(!flag){
                    localStorage.setItem(`plane-${obj.playerName}`, JSON.stringify(obj));
                }






            }
        }

    }
}

// 子弹击中敌机函数
function bulletFit() {
    for (let i = 0; i < $(".enemyPlane").length; i++) {
        //敌机left值
        let enemyPlaneLeft = $(".enemyPlane").eq(i).position().left;
        // 敌机top值
        let enemyPlaneTop = $(".enemyPlane").eq(i).position().top;
        // 敌机宽度
        let enemyPlaneWidth = $(".enemyPlane").eq(i).outerWidth();
        // 敌机高度
        let enemyPlaneHeight = $(".enemyPlane").eq(i).outerHeight();
        for (let j = 0; j < $(".bullet").length; j++) {
            // 子弹left值
            let bulletLeft = $(".bullet").eq(j).position().left;
            // 子弹top值
            let bulletTop = $(".bullet").eq(j).position().top;
            // 子弹宽度
            let bulletWidth = $(".bullet").eq(j).outerWidth();
            // 子弹高度
            let bulletHeight = $(".bullet").eq(j).outerHeight();

            if (bulletLeft + bulletWidth > enemyPlaneLeft &&
                bulletLeft < enemyPlaneLeft + enemyPlaneWidth &&
                bulletTop < enemyPlaneTop + enemyPlaneHeight &&
                bulletTop + bulletHeight > enemyPlaneTop) {
                // alert($(".enemyPlane").eq(i).attr("data-hp"));
                // 删除当前子弹
                $(".bullet").eq(j).remove();
                // 当前击中敌机的生命值-1
                let hp = $(".enemyPlane").eq(i).attr("data-hp");
                hp--; //生命值-1
                // console.log("生命值：", hp); //
                // hp=0
                if (hp > 0) {
                    $(".enemyPlane").eq(i).attr("data-hp", hp);
                    // 判断当前敌机的型号，更换敌机受伤图片
                    let num = $(".enemyPlane").eq(i).attr("data-num");
                    if (num == 2) { //中号敌机
                        $(".enemyPlane").eq(i).attr("src", "./images/boom_middle.gif");
                    } else { //大号敌机
                        $(".enemyPlane").eq(i).attr("src", "./images/boom_big.gif");
                    }
                } else {

                    $(".enemyPlane").eq(i).attr("data-hp", hp);

                    // 增加击杀数和总分数
                    $(".killNum").text($(".killNum").text() * 1 + 1);
                    let num = $(".enemyPlane").eq(i).attr("data-num") * 1;
                    $(".allNum").text($(".allNum").text() * 1 + num);
                    $(".enemyPlane").eq(i).attr("src", "./images/boom.png");

                    // 判断总分数，用于增加游戏难度
                    let allNum = $(".allNum").text();
                    if (allNum >= 20) {
                        // 停止所有计时器
                        stop();
                        // 重启所有计时器
                        start(10, 400, 1500, 10, 10, 10);
                        // 修改子弹发送数量
                        double = 2;
                    }

                    setTimeout(function () {
                        if ($(".enemyPlane").eq(i).attr("data-hp") <= 0) {
                            $(".enemyPlane").eq(i).remove();
                        }
                    }, 50);


                }



            }
        }
    }
}

// 开始计时器函数
function start(t1, t2, t3, t4, t5, t6) {
    // 子弹移动
    stopbulletMove = setInterval(bulletMove, t1);

    // 子弹发送开关，防止一直按着空格，子弹连续发送，靠在一起
    stopbulletSend = setInterval(function () {
        bulletFlag = true;
    }, t2);

    // 敌机出现
    stopenemyPlaneShow = setInterval(enemyPlaneShow, t3);
    // 敌机移动
    stopenemyPlaneMove = setInterval(enemyPlaneMove, t4);
    // 敌机与我方飞机相撞
    stopFit = setInterval(fit, t5);
    // 子弹击中敌机
    stopbulletFit = setInterval(bulletFit, t6);
}

// 结束计时器函数
function stop() {
    clearInterval(stopbulletMove);
    clearInterval(stopbulletSend);
    clearInterval(stopenemyPlaneMove);
    clearInterval(stopenemyPlaneShow);
    clearInterval(stopFit);
    clearInterval(stopbulletFit);
}


// 展示排名函数
function showList() {
    // console.log(localStorage);
    let arr = [];
    for (let i in localStorage) {
        if (i.slice(0, 5) === "plane") {
            arr.push(JSON.parse(localStorage[i]));
        }
    }
    // 按照总分倒序排列数组
    arr.sort(function (a, b) {
        return b.allNum - a.allNum
    })
    // console.log(arr);
    // 遍历数组，把数据插入到表格中
    $("tbody").html("");
    for (let i = 0; i < arr.length; i++) {
        $("tbody").html($("tbody").html() + `
        <tr>
            <td>${i+1}</td>
            <td>${arr[i].playerName}</td>
            <td>${arr[i].allNum}</td>
        </tr> 
        `)

    }
}


// 点击事件委托
$(".box").click(function () {
    // 开始游戏
    if (event.target.className === "gameStart") {

        // 开始游戏页面消失
        $("#startGame").hide();

        // 游戏页面出现
        $("#playGame").show();

        gameFlag = true;


        // 所有子弹、敌机消失
        $(".bullet").remove();
        $(".enemyPlane").remove();
        // 我方飞机回归最开始的位置
        $(".myplane").css("left", "127px");
        // 击杀数和总分数清零
        $(".killNum").text(0);
        $(".allNum").text(0);
        // 开始所有计时器
        start(10, 500, 2000, 10, 10, 10);



    }
    // 排行榜
    if (event.target.className === "list") {
        // 开始游戏页面消失
        $("#startGame").hide();
        // 结束游戏页面消失
        $("#overGame").hide();
        // 排行榜页面出现
        $("#listGame").show();
        // 渲染排名
        showList();
    }
    // 继续游戏
    if (event.target.className === "gameContinue") {
        // 暂停游戏页面消失
        $("#pauseGame").hide();
        // 开始所有计时器
        start(10, 500, 2000, 10, 10, 10);



    }

    // 重新开始
    if (event.target.className === "gameReset") {
        // 暂停游戏页面消失
        $("#pauseGame").hide();
        // 结束游戏页面消失
        $("#overGame").hide();
        // 所有子弹、敌机消失
        $(".bullet").remove();
        $(".enemyPlane").remove();
        // 我方飞机回归最开始的位置
        $(".myplane").css("left", "127px");
        // 击杀数和总分数清零
        $(".killNum").text(0);
        $(".allNum").text(0);

        // 开始所有计时器
        start(10, 500, 2000, 10, 10, 10);

    }

    // 返回首页
    if (event.target.className === "goStart") {
        // 暂停游戏页面消失
        $("#pauseGame").hide();
        // 开始游戏页面出现
        $("#startGame").show();
        // 游戏页面消失
        $("#playGame").hide();
        // 结束游戏页面消失
        $("#overGame").hide();
        // 排行榜页面消失
        $("#listGame").hide();

    }

    // 
})

// 键盘事件委托
$(window).keydown(function () {
    // 按下回车，暂停游戏
    if (event.key === "Enter" && gameFlag) {
        // 暂停游戏页面出现
        $("#pauseGame").show();
        // 停止所有计时器
        stop();

    }

    // 按下左箭头
    if (event.key === "ArrowLeft" && gameFlag) {
        let myplaneLeft = parseInt($(".myplane").css("left"));
        if (myplaneLeft <= 0) {
            $(".myplane").css("left", 0 + "px");
        } else {
            $(".myplane").css("left", myplaneLeft - 3 + "px");

        }

    }
    // 按下右箭头
    if (event.key === "ArrowRight" && gameFlag) {
        let myplaneRight = parseInt($(".myplane").css("left"));
        if (myplaneRight >= $(".box").outerWidth() - $(".myplane").outerWidth()) {
            $(".myplane").css("left", $(".box").outerWidth() - $(".myplane").outerWidth() + "px");
        } else {
            $(".myplane").css("left", myplaneRight + 3 + "px");
        }
    }

    // 按下上箭头
    if (event.key === "ArrowUp" && gameFlag) {
        let myplaneTop = parseInt($(".myplane").css("top"));
        if (myplaneTop <= 0) {
            $(".myplane").css("top", 0 + "px");
        } else {
            $(".myplane").css("top", myplaneTop - 3 + "px");

        }

    }
    // 按下下箭头
    if (event.key === "ArrowDown" && gameFlag) {
        let myplaneTop = parseInt($(".myplane").css("top"));
        if (myplaneTop >= $(".box").outerHeight() - $(".myplane").outerHeight()) {
            $(".myplane").css("top", $(".box").outerHeight() - $(".myplane").outerHeight() + "px");
        } else {
            $(".myplane").css("top", myplaneTop + 3 + "px");

        }

    }

    // 按下空格，发送子弹
    if (event.key === " " && gameFlag) {
        if (bulletFlag && double === 1) { //发送一颗子弹
            // 1.新增子弹
            $(".plane").append(`<img src="./images/bullet1.png" class="bullet" alt=""
            style="left:${parseInt($(".myplane").css("left"))+$(".myplane").outerWidth()/2+"px"};
                   top:${parseInt($(".myplane").css("top"))-14+"px"}">`);
            bulletFlag = false;
        } else if (bulletFlag && double === 2) { //发送两颗子弹
            $(".plane").append(`<img src="./images/bullet1.png" class="bullet b_left" alt=""
            style="left:${parseInt($(".myplane").css("left"))+10+"px"};
                   top:${parseInt($(".myplane").css("top"))+10+"px"}">`);

            $(".plane").append(`<img src="./images/bullet1.png" class="bullet b_right" alt=""
            style="left:${parseInt($(".myplane").css("left"))+$(".myplane").outerWidth()/2+20+"px"};
                   top:${parseInt($(".myplane").css("top"))+10+"px"}">`);
            bulletFlag = false;

        } else if (bulletFlag && double === 3) { //发送三颗子弹

        }

    }

})